open Syntax;;


module Int = struct
	type t = int
	let compare = compare
end
module IntSet = Set.Make(Int);;
module IntMap = Map.Make(Int);;

module Int2 = struct
	type t = int * int
	let compare = compare
end
module Int2Set = Set.Make(Int2);;
module Int2Map = Map.Make(Int2);;

(* delta relation of an automaton *)
module Int3 = struct
	type t = int * int * int
	let compare = compare
end
module Int3Set = Set.Make(Int3);;

(* delta relation of a product automaton *)
module Int5 = struct
	type t = (int*int) * int * (int * int)
	let compare = compare
end
module Int5Set = Set.Make(Int5);;


(* is used for conversion of letters of type gate to type int *)
module Gate = struct
	type t = gate
	let compare = compare
end
module GateSet = Set.Make(Gate);;
module GateMap = Map.Make(Gate);;

(* interpretations or possible models for the gates *)
module Model = struct
	type t = GateSet.t
	let compare = GateSet.compare
end
module ModelSet = Set.Make(Model);;
module ModelMap = Map.Make(Model);;


(* for optimizing the never claim output: (q',model)  set *)
module Modq = struct
	type t = string * int
	let compare = compare
end
module ModqSet = Set.Make(Modq);;

(* for SPIN never claim import: states are strings *)
module Str = struct
	type t = string
	let compare = compare
end
module StrSet = Set.Make(Str);;
module StrMap = Map.Make(Str);;

